import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.params.SetParams;

import java.util.Set;

public class RedisGeneral {
    public static void main(String[] args) {

        //连接 redis 服务器，配置隧道
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

        try (Jedis jedis = jedisPool.getResource()) {
//            String pong = jedis.ping();
//
//            System.out.println(pong);

//            testGetAndSet(jedis);

//            testExistsAndDel(jedis);

//            testKeys(jedis);

//            testTTL(jedis);

            testType(jedis);
        }
    }

    public static void testType(Jedis jedis) {
        jedis.flushAll();

        jedis.lpush("key1", "1", "2", "3");
        System.out.println(jedis.type("key1"));
    }

    public static void testTTL(Jedis jedis) {
        jedis.flushAll();

        jedis.set("key1", "111");
        jedis.expire("key1", 10); //设置过期时间 10s

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        System.out.println(jedis.ttl("key1"));

        jedis.set("key2", "222");
        System.out.println(jedis.ttl("key2")); //key2 不存在，返回 -2; key2 存在，但是没有设置过期时间，返回 -1

    }

    public static void testKeys(Jedis jedis) {
        jedis.flushAll();

        jedis.set("key1", "aaa");
        jedis.set("key2", "bbb");
        jedis.set("key3", "ccc");
        jedis.set("key4", "ddd");
        jedis.set("key5", "eee");

        Set<String> keys = jedis.keys("*");
        System.out.println(keys);
    }

    public static void testExistsAndDel(Jedis jedis) {
        jedis.flushAll();

        jedis.set("key1", "111");
        jedis.set("key2", "222");
        jedis.set("key3", "333");

        System.out.println(jedis.exists("key1"));

        System.out.println(jedis.del("key1"));
        System.out.println(jedis.exists("key1"));

        System.out.println(jedis.del("key1", "key2", "key3"));

    }

    public static void testGetAndSet(Jedis jedis) {
        //清空数据库
        jedis.flushAll();

        jedis.set("key1", "aaa");
        jedis.set("key2", "bbb");
        jedis.set("key3", "ccc");
        jedis.set("key4", "ddd");
        jedis.set("key5", "eee");
//
//        System.out.println(jedis.get("key3"));
//        System.out.println(jedis.get("key7"));

        SetParams params = new SetParams(); //参数设置
        params.ex(10); //过期时间为 10s
//        params.xx(); //存在才设置
        params.nx(); //不存在才设置

        jedis.set("key1", "ccc", params); //带有参数的 set

        System.out.println(jedis.get("key1"));

    }
}
